package com.dkd.manage.mapper;

import java.util.List;
import com.dkd.manage.domain.Task;
import com.dkd.manage.domain.TaskDetails;

/**
 * 工单Mapper接口
 *
 * @author dkd
 * @date 2025-11-10
 */
public interface TaskMapper
{
    /**
     * 查询工单
     *
     * @param id 工单主键
     * @return 工单
     */
    public Task selectTaskById(Long id);

    /**
     * 根据工单编号查询工单
     *
     * @param taskNo 工单编号
     * @return 工单
     */
    public Task selectTaskByTaskNo(String taskNo);

    /**
     * 查询工单列表
     *
     * @param task 工单
     * @return 工单集合
     */
    public List<Task> selectTaskList(Task task);

    /**
     * 新增工单
     *
     * @param task 工单
     * @return 结果
     */
    public int insertTask(Task task);

    /**
     * 修改工单
     *
     * @param task 工单
     * @return 结果
     */
    public int updateTask(Task task);

    /**
     * 删除工单
     *
     * @param id 工单主键
     * @return 结果
     */
    public int deleteTaskById(Long id);

    /**
     * 批量删除工单
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTaskByIds(Long[] ids);

    /**
     * 批量删除工单详情
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTaskDetailsByTaskIds(Long[] ids);

    /**
     * 批量新增工单详情
     *
     * @param taskDetailsList 工单详情列表
     * @return 结果
     */
    public int batchTaskDetails(List<TaskDetails> taskDetailsList);

    /**
     * 通过工单主键删除工单详情信息
     *
     * @param id 工单ID
     * @return 结果
     */
    public int deleteTaskDetailsByTaskId(Long id);

    /**
     * 查询设备是否存在未完成的同类型工单
     *
     * @param deviceId 设备ID
     * @param taskTypeId 工单类型ID
     * @param excludeTaskId 排除的工单ID（用于修改时排除自己）
     * @return 工单数量
     */
    public int countUnfinishedTaskByDeviceAndType(Long deviceId, Integer taskTypeId, Long excludeTaskId);
}
